/*

  The contents of this file are subject to the Mozilla Public License Version
  1.1 (the "License"); you may not use this file except in compliance with
  the License. You may obtain a copy of the License at 
  
           http://www.mozilla.org/MPL/ 
  
  Software distributed under the License is distributed on an "AS IS" basis,
  WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  for the specific language governing rights and limitations under the License. 
  
  The Original Code is Indigo framework applicatif.
  
  The Initial Developer of the Original Code is
  Olivier Bugalotto (aka Iteratif) <olivier.bugalotto@iteratif.net>.
  Portions created by the Initial Developer are Copyright (C) 2004-2008
  the Initial Developer. All Rights Reserved.
  
  Contributor(s) :
  
*/
package indigo.air
{
	import indigo.air.descriptors.FileDescriptorLoader;
	import indigo.air.events.ApplicationEvent;
	import indigo.context.ApplicationContext;
	
	import mx.core.WindowedApplication;

	[Event(name="ready",type="indigo.air.events.ApplicationEvent")]
	public class IndigoApplication extends WindowedApplication
	{
		private var _urlDescriptor:String = "app-config.xml";
		/**
		 * Obtenir le chemin du fichier descripteur 
		 * @return 
		 * 
		 */
		public function get urlDescriptor():String {
			return _urlDescriptor;
		}
		
		/**
		 * Definit un chemin vers un fichier descripteur 
		 * @param value
		 * 
		 */
		 [Inspectable(category="General", defaultValue="app-config.xml", format="File")]
		public function set urlDescriptor(value:String):void {
			_urlDescriptor = value;
		}
		
		public function IndigoApplication()
		{
			super();
			
			// TODO: Ne pas utiliser la classe concrete mais plutot utiliser une description
			// dans le fichier de configuration AIR pour l'instancier :
			//
			//	<sections>
			//		<section name="objets" type="iteratif.air.descriptor.ApplicationDescriptor" />
			//	</sections>
			//
			//	<objects xmlns="http://www.indigo-framework.org">
			//		...
			//	</objects>
			// Probleme: pas possible de faire de cette manière puisque la classe n'est pas inclus
			// à la compilation, il faudrait donc le faire manuellement.
			
		}
		
		/**
		 * C'est dans cette méthode que nous initialisons le descripteur de fichier de configuration
		 * basé sur le fichier de description d'application AIR.
		 * Vous pouvons redéfinir cette méthode créer votre propre mode de stockage de configuration :
		 * <code>
		 * protected override function initDescriptor(registry:IObjectDefinitionRegistry):void {
		 * 		var dJson:IDescriptor = new JSONDescriptor(registry);
		 * 		var file:File = new File();
		 * 		file = file.resolvePath("app-config.json");
		 * 		var reader:FileStream = new FileStream();
		 * 		reader.open(file,FileMode.READ);
		 * 		dJson.parse(reader.readUTFBytes(reader.ByteAvailable));
		 * }
		 * </code>
		 * TODO: faire un exemple avec une base de données SQLite
		 * @param registry
		 * 
		 */
		
		public override function initialize():void {
			super.initialize();
			ApplicationContext.descriptorLoader = new FileDescriptorLoader();
			ApplicationContext.url = urlDescriptor;
			ApplicationContext.start(ready);
		}
		
		private function ready():void {
			dispatchEvent(new ApplicationEvent(ApplicationEvent.READY));
		}
	}
}